package com.github.danielwegener.logback.kafka.codec;

import java.util.List;

public enum Encoding {
    JSON {
        @Override
        public int listSizeInBytes(int encodedSizeInBytes) {
            return 2 + encodedSizeInBytes;
        }

        @Override
        public int listSizeInBytes(List<byte[]> values) {
            int sizeInBytes = 2;
            int i = 0;
            int length = values.size();

            while(i < length) {
                sizeInBytes += ((byte[])values.get(i++)).length;
                if (i < length) {
                    ++sizeInBytes;
                }
            }

            return sizeInBytes;
        }
    },
    /** @deprecated */
    @Deprecated
    THRIFT {
        @Override
        public int listSizeInBytes(int encodedSizeInBytes) {
            return 5 + encodedSizeInBytes;
        }

        @Override
        public int listSizeInBytes(List<byte[]> values) {
            int sizeInBytes = 5;
            int i = 0;

            for(int length = values.size(); i < length; ++i) {
                sizeInBytes += ((byte[])values.get(i)).length;
            }

            return sizeInBytes;
        }
    },
    PROTO3 {
        @Override
        public int listSizeInBytes(int encodedSizeInBytes) {
            return encodedSizeInBytes;
        }

        @Override
        public int listSizeInBytes(List<byte[]> values) {
            int sizeInBytes = 0;
            int i = 0;

            for(int length = values.size(); i < length; sizeInBytes += ((byte[])values.get(i++)).length) {
            }

            return sizeInBytes;
        }
    };

    private Encoding() {
    }

    public abstract int listSizeInBytes(int var1);

    public abstract int listSizeInBytes(List<byte[]> var1);
}
